/*
 * EventDispatcherManager.h
 *
 *  Created on: 2013-8-29
 *  Author: xnan
 */

#ifndef XNL_EVENTDISPATCHERMANAGER_CLASS_H_
#define XNL_EVENTDISPATCHERMANAGER_CLASS_H_

#include <vector>
#include "base/Object.h"
#include "IEventDispatcher.h"

NS_XNL_BEGIN

/*
 * 此类用于管理希望被触发的事件调度器(EventDispatcher).
 * 任何类都可以通过向该类传递事件(Event),
 * 从而使该类可以触发已经被添加进来的事件调度器
 */
class EventDispatcherManager : public Object
{
public:
    EventDispatcherManager();
    virtual ~EventDispatcherManager();
    
    /*
     * 将一个事件调度器添加进来,收到事件时就可以直接转发给已添加的对象
     */
    void addEventDispatcher( IEventDispatcher * p_eventDispatcher );
    
    /*
     * 将一个事件调度器删除,删除之后将无法获得事件
     */
    void removeEventDispatcher( IEventDispatcher * p_eventDispatcher );
    
    /*
     * 此类可以创建一个全局对象,而且一般情况下也只需要一个此类的对象
     */
    EventDispatcherManager * instance();
    
protected:
    std::vector<IEventDispatcher*> m_eventDispatchers;
};

NS_XNL_END

#endif /* XNL_EVENTDISPATCHERMANAGER_CLASS_H_ */
